出处:掘金
原作者:前端微白
在 Web 开发中,经常需要处理浏览器 cookies。本文将详细介绍如何使用 JS 编写一个高效的 cookie 解析函数,将 cookie 字符串转换为方便使用的 JS 对象
在实现解析器之前,需要了解 cookie 字符串的标准格式:
"name=value; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/; domain=example.com; secure; HttpOnly"
name=value)expires, path, domain 等)function parseCookies(cookieString) {
// 如果输入为空,返回空对象
if (!cookieString || cookieString.trim() === '') {
return {};
}
const cookies = {};
// 用分号分割字符串
const items = cookieString.split(';');
items.forEach(item => {
// 按第一个等号分割键值对
const [key, ...values] = item.split('=');
// 如果没有值,跳过此项
if (values.length === 0) return;
// 合并值部分(可能包含等号)
const value = values.join('=');
// 清理字符串两端空格
const cleanedKey = key.trim();
const trimmedValue = value.trim();
// 尝试解码 URL 编码的值
let cleanedValue;
try {
cleanedValue = decodeURIComponent(trimmedValue);
} catch (e) {
// 解码失败,使用原始值
cleanedValue = trimmedValue;
}
// 将有效的键值对添加到结果对象
if (cleanedKey && cleanedValue !== undefined) {
cookies[cleanedKey] = cleanedValue;
}
});
return cookies;
}
decodeURIComponent() 处理 URL 编码的值